package cn.com.blueInfo.bpm.person.request;

import cn.com.blueInfo.bpm.common.request.BaseDTO;
import cn.com.blueInfo.bpm.common.request.BaseQueryDTO;
import cn.com.blueInfo.bpm.person.enums.OrganizationTreeType;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
 * 组织结构信息表 接收参数机校验
 * @author suxch
 * @since 2025-08-24 01:39:52
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "组织结构信息 接收参数及校验")
public class OrganizationDTO extends BaseDTO {

    /** 组织级别ID */
    @NotNull(message = "组织级别ID 不能为空")
    @Schema(description = "组织级别ID")
    private Long orgLevelId;
    /** 级别路径 */
    @NotBlank(message = "级别路径 不能为空")
    @Schema(description = "级别路径")
    private String levelPath;
    /** 组织编码（业务唯一） */
    @NotBlank(message = "组织编码 不能为空")
    @Schema(description = "组织编码（业务唯一）")
    private String orgCode;
    /** 组织全称 */
    @NotBlank(message = "组织全称 不能为空")
    @Schema(description = "组织全称")
    private String orgName;
    /** 组织简称（代字） */
    @Schema(description = "组织简称（代字）")
    private String orgShortName;
    /** 组织类别（如“销售”、“技术”） */
    @Schema(description = "组织类别（如“销售”、“技术”）")
    private String orgCategory;
    /** 父组织ID（顶级为0） */
    @NotNull(message = "父组织ID 不能为空")
    @Schema(description = "父组织ID（顶级为0）")
    private Long parentId;
    /** 组织ID路径 */
    @NotBlank(message = "组织ID路径 不能为空")
    @Schema(description = "组织ID路径")
    private String orgPathId;
    /** 组织中文路径 */
    @NotBlank(message = "组织中文路径 不能为空")
    @Schema(description = "组织中文路径")
    private String orgPathCn;
    /** 组织描述 */
    @Schema(description = "组织描述")
    private String description;
    /** 树形结构类型：1-常规组织，2-虚拟组织 */
    @NotNull(message = "树形结构类型 不能为空")
    @Schema(description = "树形结构类型：1-常规组织，2-虚拟组织")
    private OrganizationTreeType treeType;

    /**
     * 组织结构信息 接收分页查询参数
     * @author suxch
     * @since 2025-08-21 05:08:55
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    @Schema(description = "组织结构信息 接收分页查询参数")
    public static class QueryDTO extends BaseQueryDTO {

        /** 组织级别ID */
        @Schema(description = "组织级别ID")
        private Long orgLevelId;
        /** 级别路径 */
        @Schema(description = "级别路径")
        private String levelPath;
        /** 组织编码（业务唯一） */
        @Schema(description = "组织编码（业务唯一）")
        private String orgCode;
        /** 组织全称 */
        @Schema(description = "组织全称")
        private String orgName;
        /** 组织简称（代字） */
        @Schema(description = "组织简称（代字）")
        private String orgShortName;
        /** 组织类别（如“销售”、“技术”） */
        @Schema(description = "组织类别（如“销售”、“技术”）")
        private String orgCategory;
        /** 父组织ID（顶级为0） */
        @Schema(description = "父组织ID（顶级为0）")
        private Long parentId;
        /** 组织ID路径 */
        @Schema(description = "组织ID路径")
        private String orgPathId;
        /** 组织中文路径 */
        @Schema(description = "组织中文路径")
        private String orgPathCn;
        /** 组织描述 */
        @Schema(description = "组织描述")
        private String description;
        /** 树形结构类型：1-常规组织，2-虚拟组织 */
        @Schema(description = "树形结构类型：1-常规组织，2-虚拟组织")
        private OrganizationTreeType treeType;

    }

    /**
     * 组织结构信息 接收部分更新参数及校验
     * @author suxch
     * @since 2025-08-21 05:08:55
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    @Schema(description = "组织结构信息 接收部分更新参数及校验")
    public static class UpdatePartialDTO extends BaseDTO {

        /** 组织简称（代字） */
        @Schema(description = "组织简称（代字）")
        private String orgShortName;
        /** 组织类别（如“销售”、“技术”） */
        @Schema(description = "组织类别（如“销售”、“技术”）")
        private String orgCategory;
        /** 组织描述 */
        @Schema(description = "组织描述")
        private String description;

    }

}